package com.itheima.dubbo.mongodb.impl;

import cn.hutool.core.util.ObjectUtil;
import com.alibaba.dubbo.config.annotation.Service;
import com.itheima.commons.pojo.mongo.Visitors;
import com.itheima.dubbo.interfaces.VisitorsApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;

import java.util.List;

/**
 * @author yaohu
 * @date 2021/12/14
 * @Version 1.0
 * @describe
 */
@Service
public class VisitorsApiImpl implements VisitorsApi {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 分页查询来访用户列表
     *
     * @param userId
     * @param page
     * @param pageSize
     * @return
     */
    @Override
    public List<Visitors> topVisitor(Long userId, Integer page, Integer pageSize) {
        return mongoTemplate.find(Query.query(Criteria.where("userId").is(userId))
                .with(Sort.by(Sort.Order.desc("date")))
                .with(PageRequest.of(page - 1, pageSize)), Visitors.class);
    }

    /**
     * 查询我的访客数据，存在2种情况：
     * 1. 我没有看过我的访客数据，返回前5个访客信息
     * 2. 之前看过我的访客，从上一次查看的时间点往后查询5个访客数据
     *
     * @param userId        当前用户
     * @param lastQueryDate 上次查看时间
     * @return
     */
    @Override
    public List<Visitors> queryMyVisitor(Long userId, Long lastQueryDate) {
        if (ObjectUtil.isNull(lastQueryDate)) {
            return mongoTemplate.find(Query.query(Criteria.where("userId").is(userId))
                    .with(Sort.by(Sort.Order.desc("date")))
                    .with(PageRequest.of(0, 5)), Visitors.class);
        }
        return mongoTemplate.find(Query.query(Criteria.where("userId").is(userId).and("date").gt(lastQueryDate))
                .with(Sort.by(Sort.Order.desc("date")))
                .with(PageRequest.of(0, 5)), Visitors.class);
    }

    /**
     * 保存来访者信息
     *
     * @param visitors 来访者对象
     */
    @Override
    public String saveVisitor(Visitors visitors) {
        return mongoTemplate.save(visitors).getId().toHexString();
    }
}
